﻿namespace Nomo.UnityCoreModule
{
    /// <summary>
    /// 矩形变换数据。
    /// </summary>
    [System.Serializable]
    public struct RectTransformData
    {
        /// <summary>
        /// 左下锚点。
        /// </summary>
        public UnityEngine.Vector2 anchorMin;

        /// <summary>
        /// 右上锚点。
        /// </summary>
        public UnityEngine.Vector2 anchorMax;

        /// <summary>
        /// 位置与两个锚点的引用点的位置的差值。
        /// </summary>
        public UnityEngine.Vector2 anchoredPosition;

        /// <summary>
        /// 大小与两个锚点构成的矩形的大小的差值。
        /// </summary>
        public UnityEngine.Vector2 sizeDelta;

        /// <summary>
        /// 枢轴。
        /// </summary>
        public UnityEngine.Vector2 pivot;

        /// <summary>
        /// 局部旋转。
        /// </summary>
        public UnityEngine.Quaternion localRotation;

        /// <summary>
        /// 局部缩放。
        /// </summary>
        public UnityEngine.Vector3 localScale;

        /// <summary>
        /// 根据指定的矩形变换获取 <see cref="RectTransformData"/> 结构的新实例。
        /// </summary>
        /// <param name="rectTransform">矩形变换。</param>
        /// <returns>描述 <paramref name="rectTransform"/> 的 <see cref="RectTransformData"/> 结构的新实例。</returns>
        /// <exception cref="System.ArgumentNullException"><paramref name="rectTransform"/> 为 <see langword="null"/> .</exception>
        public static RectTransformData FromRectTransform(UnityEngine.RectTransform rectTransform)
        {
            if (rectTransform == null)
            {
                throw new System.ArgumentNullException(nameof(rectTransform));
            }

            return new RectTransformData
            {
                anchorMin        = rectTransform.anchorMin,
                anchorMax        = rectTransform.anchorMax,
                anchoredPosition = rectTransform.anchoredPosition,
                sizeDelta        = rectTransform.sizeDelta,
                pivot            = rectTransform.pivot,
                localRotation    = rectTransform.localRotation,
                localScale       = rectTransform.localScale
            };
        }
    }
}
